/**
 * Created by Mark on 2018/4/16.
 * 购物车的处理逻辑
 */

require("./cart.css");
var nav = require("page/common/nav/nav.js");
require("page/common/header/header.js");
var _mm = require("util/mm.js");
var _cart = require("service/cart-service.js");
var templateHtml = require("./cart.string");

var page = {
    data: {

    },
    init: function () {
        this.onLoad();
        this.bindEvent();
    },
    onLoad : function(){
        this.onLoadCart();
    },
    bindEvent : function(){
        this.selectAndUnselect();       //单选和单反选
        this.selectAllAndUnselectAll(); //全选和全反选
        this.clickCountBtnEvent();      //数量加减
        this.delete();                  //删除单个商品
        this.deleteSelected();          //删除已选中的商品
        this.clickSubmitBtn();          //去结算事件
    },

    /** 1.页面初始化函数 **/
    //1.1加载购物车数据
    onLoadCart : function(){
        var _this = this;
        _cart.getCartList(function(res){//成功时的回调函数
            _this.renderCart(res.data);
        },function(err){//失败时的回调函数
            _this.showCartError(err.msg);
        });
    },

    /** 2.事件绑定函数 **/
    //2.1单选，单反选的事件
    selectAndUnselect : function(){
        var _this = this;
        $(document).on("click",".cart-select",function(){
            var $this = $(this);
            var productId = $this.parents(".cart-table").data("product-id");
            if($this.is(":checked")){//选中
                _cart.selectProduct(productId,
                    function(res){
                        _this.renderCart(res.data);
                     },function(err){
                        _this.showCartError(err.msg);
                    }
                );
            }else{//取消选中
                _cart.unSelectProduct(productId,
                    function(res){
                        _this.renderCart(res.data);
                    },function(err){
                        _this.showCartError(err.msg);
                    }
                );
            }
        });
    },

    //2.2全选和全反选
    selectAllAndUnselectAll : function(){
        var _this = this;
        $(document).on("click",".cart-select-all",function(){
            var $this = $(this);
            if($this.is(":checked")){//选中
                _cart.selectAllProduct(
                    function(res){
                        _this.renderCart(res.data);
                    },function(err){
                        _this.showCartError(err.msg);
                    }
                );
            }else{//取消选中
                _cart.unSelectAllProduct(
                    function(res){
                        _this.renderCart(res.data);
                    },function(err){
                        _this.showCartError(err.msg);
                    }
                );
            }

        });
    },

    //2.3购物数量按钮加一减一操作
    clickCountBtnEvent : function(){
        var _this = this;
        $(document).on("click",".count-btn",function(){
           var $this = $(this),
               $pCount = $this.siblings(".count-input"),
               type = $this.hasClass("plus") ? "plus" : "minus",
               productId = $this.parents(".cart-table").data("product-id"),
               currentCount = parseInt($pCount.val()),//当前值
               minCount = 1,//最小值
               maxCount = parseInt($pCount.data("max")),//最大值(库存量)
               newCount = 0;
            if(type === "plus"){//+1
                if(currentCount >= maxCount){
                    _mm.errorTips("商品数量已经达到上限了！");
                    return;
                }
                newCount = currentCount + 1;
            }else if(type === "minus"){//-1
                if(currentCount <= minCount){
                    return
                }
                newCount = currentCount -1;
            }
            //更新购物车中的数量
            _cart.updateProduct({
                productId : productId,
                count : newCount
            }, function (res) {
                _this.renderCart(res.data);
            }, function (err) {
                _this.showCartError(err.msg)
            });
        });
    },

    //2.4删除单个商品
    delete : function(){
        var _this =this;
        $(document).on("click",".cart-delete", function () {
            if(window.confirm("你確定删除当前面前商品吗？")){
                var productId =$(this).parents(".cart-table").data("product-id");
                _this.deleteCartProduct(productId);
            }
        });
    },

    //2.5删除选中的商品
    deleteSelected : function () {
      var _this = this;
        $(document).on("click",".delete-selected", function () {
            if(window.confirm("确定要删除该商品吗？")) {
                var arrProductIds = [],//把选中的商品的id存放到一个数组中
                    $selectedItem = $(".cart-select:checked");
                var i = 0;
                for (i,iLength = $selectedItem.length ; i<iLength ; i++){
                    arrProductIds.push($($selectedItem[i]).parents(".cart-table").data("product-id"));
                }
                if(arrProductIds.length){
                    var productIds = arrProductIds.join(",");//将元素以“，”分割拼接为字符串
                    _this.deleteCartProduct(productIds);
                }else{
                    _mm.errorTips("您还还没有选择需要删除的商品")
                }
            }
        });
    },

    //2.6点击去结算事件
    clickSubmitBtn : function () {
        var _this = this;
        $(document).on("click",".btn-submit", function () {
            if(_this.data.cartInfo && _this.data.cartInfo.catTotalPrice > 0 ){
                window.location.href = "./order-confirm.html";
            }else{
                _mm.errorTips("你还没选择商品");
            }
        });
    },

    /** 3.辅助函数 **/
    //3.1删除一个或者多个商品的业务请求
    deleteCartProduct : function (productIds) {
        var _this = this;
        _cart.deleteProducts(productIds,
            function (res) {
                _this.renderCart(res.data);
            },
            function (err) {
                _this.showCartError(err.msg);
            });
    },

    //3.2渲染购物车
    renderCart : function(data){
        this.filter(data);
        this.data.cartInfo = data;
        var cartHtml = _mm.renderHtml(templateHtml,data);
        $(".page-wrap").html(cartHtml);
        nav.loadCartCount();//通知导航栏更新购物车中商品的数量
    },

    //3.3数据匹配
    filter : function(data){
      data.notEmpty  = !! data.cartProductVoList.length;//数据渲染时用到,如果为false就显示购物车为空
    },

    //3.4显示错误信息
    showCartError : function(msg){
        $('.page-wrap').html('<p class="err-tip"><i class="fa fa-meh-o" aria-hidden="true"></i>'+ '   '+msg+'</p>');
    }
};
$(function(){
    page.init();
});

